package first1


class DuiXingTest(age:Int) {

  /**
    * age 无get  set  方法，外部无法获取其值大小
    * val:只有get方法
    * var:get与set方法都有
    * private[this]：辅助构造器 该对象私有 不会有get set方法
    */
//  private var age:Int = 1
  private val age1:Int = 1
  private var name:String = "tom"
  private[this] var name1:String = "tom"

  /**
    * 内部嵌套类
    */
    //同时为主构造器 new innerClass("play","haha")
  class innerClass(like:String,think:String){
    def this(think:String){
      this("play",think)
    }
  }

  def ff(): Unit ={
    println(age)
  }

  private val inner = new innerClass("sdsd")


  /**
    * apply方法，构造对象不用new   ----- DuiXingTest(12)
    * @param age
    * @return
    */
  def apply(age: Int): DuiXingTest = new DuiXingTest(age)

}


/**
  * 1、伴生对象，main方法
  * 2、相当于单例模式
  * 3、都是静态的
  */
object DuiXingTest {
  def main(args: Array[String]): Unit = {
    val test = new DuiXingTest(4)
    test.ff()
    val inner = test.inner
    println(inner)
  }

  /**
    * extends App  运行不用创建main方法
    */
  object DuiXingTest extends App {

    val test = new DuiXingTest(4)
    test.ff()

    val inner = test.inner
    println(inner)
  }

}